package com.mikufufu.blog.service;

import com.mikufufu.blog.model.entity.Permission;
import com.mikufufu.blog.model.vo.admin.PermissionVO;
import com.mikufufu.blog.model.vo.admin.PermissionRoleListVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Set;

/**
 * 权限表 服务类
 * 
 */
public interface PermissionService extends IService<Permission>{

    /**
     * 根据角色ID获取权限集合。
     *
     * @param roleId 角色的唯一标识符。
     * @return 返回一个权限集合，集合中的每个元素都是Permission类型。
     */
    Set<Permission> getPermissionSet(Integer roleId);

    /**
     * 获取角色权限列表。
     *
     * @return 返回一个包含角色权限信息的列表
     */
    List<PermissionRoleListVO> getPermissionRoleList();

    /**
     * 为指定角色添加权限。
     *
     * @param roleId 角色的唯一标识符。
     * @param permissionId 权限的唯一标识符。
     * @return 添加成功返回true，失败返回false。
     */
    Boolean addRolePermission(Integer roleId, Integer permissionId);

    /**
     * 添加所有控制器权限。
     *
     * @return 添加成功返回true，失败返回false。
     */
    Boolean addAllControllerPermission();

    /**
     * 为指定角色设置所有权限。
     *
     * @param roleId 角色的唯一标识符。
     * @return 设置成功返回true，失败返回false。
     */
    Boolean setAllPermission(Integer roleId);

    /**
     * 清除指定角色的所有权限。
     *
     * @return 清除成功返回true，失败返回false。
     */
    Boolean cleanRolePermission();

    /**
     * 根据角色ID获取权限列表。
     *
     * @param roleId 角色的唯一标识符。
     * @return 返回一个权限对象列表，每个对象代表一个特定的权限。
     */
    List<PermissionVO> getPermissionByRole(Integer roleId);

    Boolean grantAnonymousPermission();
}
